<?php
/**
 * Created by PhpStorm.
 * User: HuangLuSen
 * Date: 2017/5/11
 * Time: 11:29
 */

namespace app\wechat\traits;

use EasyWeChat\Foundation\Application;
use think\Db;

trait Wechat
{
//微信平台
    protected static $options = [
        /**
         * Debug 模式，bool 值：true/false
         *
         * 当值为 false 时，所有的日志都不会记录
         */
        'debug' => false,
        /**
         * 账号基本信息，请从微信公众平台/开放平台获取
         */
        'app_id' => '',
        'secret' => '',
        'token' => '',
        'aes_key' => '',
        'we_name' => '',
        'we_id' => '',
        'we_number' => '',
        'we_type' => 1,
        /**
         * 日志配置
         *
         * level: 日志级别, 可选为：
         *         debug/info/notice/warning/error/critical/alert/emergency
         * permission：日志文件权限(可选)，默认为null（若为null值,monolog会取0644）
         * file：日志文件位置(绝对路径!!!)，要求可写权限
         */
        'log' => [
            'level' => 'debug',
            'permission' => 0777,
            'file' => '../runtime/temp/easywechat.log',
        ],
        /**
         * OAuth 配置
         *
         * scopes：公众平台（snsapi_userinfo / snsapi_base），开放平台：snsapi_login
         * callback：OAuth授权完成后的回调页地址
         */
        'oauth' => [
            'scopes' => ['snsapi_userinfo'],
            'callback' => '/index/login/receive.html',
        ],
        /**
         * 微信支付
         */
        'payment' => [
            'merchant_id' => 'your-mch-id',
            'key' => 'key-for-signature',
            'cert_path' => 'E:/huangsen/cacert.pem', // XXX: 绝对路径！！！！
            'key_path' => 'path/to/your/key',      // XXX: 绝对路径！！！！
            // 'device_info'     => '013467007045764',
            // 'sub_app_id'      => '',
            // 'sub_merchant_id' => '',
            // ...
        ],
        /**
         * Guzzle 全局设置
         *
         * 更多请参考： http://docs.guzzlephp.org/en/latest/request-options.html
         */
        'guzzle' => [
            'timeout' => 300.0, // 超时时间（秒）
            'verify' => false, // 关掉 SSL 认证（强烈不建议！！！）
        ],
    ];
    public static $wechatapp = null;

    /**
     * 微信获取
     * @return Application|null
     * @author: Huang
     * @internal
     */
    static public function getInstance()
    {
        if (is_null(self::$wechatapp) || isset (self::$wechatapp)) {
            $config = Db::name('options')->where('option_remark','weixin_option')->value('option_value');
//            halt($config);
            if (!empty($config)) self::$options = array_merge(self::$options, json_decode($config,true));
            self::$wechatapp = new Application(self::$options);
            config('app_debug', false);
            config('app_trace', false);
        }
        return self::$wechatapp;
    }
    /**
     * 检测微信是否为检测请求 并进行加密认证
     * @return bool
     * @internal
     */
    protected function checkSignature()
    {
        $signature = input('signature');
        $timestamp = input('timestamp');
        $nonce = input('nonce');
        $config = Db::name('options')->where('option_remark','weixin_option')->value('option_value');
        if (!empty($config)) self::$options = array_merge(self::$options, json_decode($config,true));
        $token = self::$options['token'];
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode($tmpArr);
        $tmpStr = sha1($tmpStr);
        if ($tmpStr == $signature) {
            return true;
        } else {
            return false;
        }
    }
}